package service;

import java.util.Date;
import java.util.List;

import dao.GrupoProdutoDAO;
import dao.ProdutoDAO;

import entity.GrupoProduto;
import entity.ItemCompra;
import entity.ItemVenda;
import entity.MarcaProduto;
import entity.Produto;

public interface ProdutoService {

	void salvarProduto(final Produto produto);

	List<Produto> listarTodosProdutos();

	List<GrupoProduto> listarTodosGruposProduto();

	List<GrupoProduto> listarGruposProdutoAtivos();

	List<MarcaProduto> listarMarcasProdutoAtivos();

	List<MarcaProduto> listarTodasMarcasProduto();

	Produto criarNovoProduto();

	MarcaProduto criarNovoMarcaProduto();

	GrupoProduto criarNovoGrupoProduto();

	Produto buscarProdutoPorChave(Long id);

	MarcaProduto buscarMarcaPorChave(Long id);

	GrupoProduto buscarGrupoPorChave(Long id);

	void remover(Produto produto);

	void removerGrupoProduto(GrupoProduto grupoProduto);

	void desativar(Produto produto);

	void removerMarcaProduto(MarcaProduto grupoProduto);

	void salvarGrupoProduto(GrupoProduto grupoProduto);

	void salvarMarcaProduto(MarcaProduto marcaProduto);

	// Double buscarUltimaVenda(Produto produto);

	// Double buscarUltimaCompra(Produto produto);

	// Integer buscaQtdaItensPorVencimento(Produto produto);

	List<Produto> listarProdutosAtivos();

	List<ItemCompra> listarComprasProdutoPorPeriodo(Produto produto,
			Date dataInicial, Date dataFinal);

	List<ItemVenda> listarVendasProdutoPorPeriodo(Produto produto,
			Date dataInicial, Date dataFinal);

	int buscarQuantidadeProdutosAtivos();

	int buscarQuantidadeMarcasAtivos();

	int buscarQuantidadeGruposAtivos();

	List<Produto> buscarProdutosComEstoqueAbaixoLimiteMinino();

	void setGrupoProdutoDAO(GrupoProdutoDAO grupoProdutoDAO);

	void setProdutoDAO(ProdutoDAO produtoDAO);

	List<Produto> buscarProdutosAtivosPorNome(String nome);

}
